package edu.pe.cayetano.model.bo;

import org.apache.commons.beanutils.DynaBean;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.dao.OperacionesComunesDAO;
import edu.pe.cayetano.dao.PacienteDAO;
import edu.pe.cayetano.framework.BusinessException;
import edu.pe.cayetano.framework.Configuration;
import edu.pe.cayetano.seccd.constantes.ConstantesSECCD;
import edu.pe.cayetano.util.Utilitario;

public class PacienteBO extends BaseBO{

	private	String		schema			= Configuration.getSchemaDB();
	
	public StringBuffer estableceQuery(DynaBean dyna){
		StringBuffer 			query 			= new StringBuffer();
		String criterio		= null;
		if(Utilitario.validaAtributoDynaBean(dyna, "criterio"))
			criterio=(String)dyna.get("criterio");
		String campo		= (String)dyna.get("optCampo");
		String operacion	= (String)dyna.get("operacion");
		
		if(operacion.equalsIgnoreCase(ConstantesSECCD.OPERACION_BUSQUEDA)){
			if(campo.equalsIgnoreCase("todos")){
				query.append(" SELECT PACIENTE_ID,NOMBRES,APEPATERNO,APEMATERNO,B.NOMBRE AS DISTRITO,DNI,FECHANACIMIENTO,TELEFONO_FIJO,TELEFONO_CELULAR,TIENE_HC "); 
				query.append(" FROM "+schema+"PACIENTE A INNER JOIN "+schema+"UBIGEO B ON A.COD_UBIGEO=B.COD_UBIGEO");
			}else{
				query.append(" SELECT PACIENTE_ID,NOMBRES,APEPATERNO,APEMATERNO,B.NOMBRE AS DISTRITO,DNI,FECHANACIMIENTO,TELEFONO_FIJO,TELEFONO_CELULAR,TIENE_HC "); 
				query.append(" FROM "+schema+"PACIENTE A INNER JOIN "+schema+"UBIGEO B ON A.COD_UBIGEO=B.COD_UBIGEO");
				query.append(" where upper("+campo.toUpperCase()+") like '%"+criterio.toUpperCase()+"%'"); 
			}

		}
		if(operacion.equalsIgnoreCase(ConstantesSECCD.OPERACION_LISTADO)){
			query.append(" SELECT PACIENTE_ID,NOMBRES,APEPATERNO,APEMATERNO,B.NOMBRE AS DISTRITO,DNI,FECHANACIMIENTO,TELEFONO_FIJO,TELEFONO_CELULAR,TIENE_HC "); 
			query.append(" FROM "+schema+"PACIENTE A INNER JOIN "+schema+"UBIGEO B ON A.COD_UBIGEO=B.COD_UBIGEO");
		}
		System.out.println("21:"+query.toString());
		return query;
	}

	public StringBuffer estableceQuery(String operacion,String campo,String criterio){
		StringBuffer 			query 			= new StringBuffer();
		if(operacion.equalsIgnoreCase(ConstantesSECCD.OPERACION_BUSQUEDA)){
			if(campo.equalsIgnoreCase("todos")){
				query.append(" SELECT PACIENTE_ID,NOMBRES,APEPATERNO,APEMATERNO,B.NOMBRE AS DISTRITO,DNI,FECHANACIMIENTO,TELEFONO_FIJO,TELEFONO_CELULAR,TIENE_HC "); 
				query.append(" FROM "+schema+"PACIENTE A INNER JOIN "+schema+"UBIGEO B ON A.COD_UBIGEO=B.COD_UBIGEO");
			}else{
				query.append(" SELECT PACIENTE_ID,NOMBRES,APEPATERNO,APEMATERNO,B.NOMBRE AS DISTRITO,DNI,FECHANACIMIENTO,TELEFONO_FIJO,TELEFONO_CELULAR,TIENE_HC "); 
				query.append(" FROM "+schema+"PACIENTE A INNER JOIN "+schema+"UBIGEO B ON A.COD_UBIGEO=B.COD_UBIGEO");
				query.append(" where upper("+campo.toUpperCase()+") like '%"+criterio.toUpperCase()+"%'"); 
			}

		}
		if(operacion.equalsIgnoreCase(ConstantesSECCD.OPERACION_LISTADO)){
			query.append(" SELECT PACIENTE_ID,NOMBRES,APEPATERNO,APEMATERNO,B.NOMBRE AS DISTRITO,DNI,FECHANACIMIENTO,TELEFONO_FIJO,TELEFONO_CELULAR,TIENE_HC "); 
			query.append(" FROM "+schema+"PACIENTE A INNER JOIN "+schema+"UBIGEO B ON A.COD_UBIGEO=B.COD_UBIGEO");
		}
		System.out.println("1:"+query.toString());
		return query;
	}
	
	public BResult listarPaciente() throws BusinessException{
		BResult 				retSalida		= null;
		StringBuffer 			query 			= new StringBuffer(); 
		OperacionesComunesDAO	operacionesDAO	= null;
		try{
			query = estableceQuery(ConstantesSECCD.OPERACION_LISTADO,"","");
			conectar();
			operacionesDAO	 	= new OperacionesComunesDAO(conn);
			retSalida 	= operacionesDAO.listado(query);
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(-1);
			retSalida.setMessage("[PacienteBO] error en metodo listarPaciente generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(-1);
				retSalida.setMessage("[PacienteBO] error en metodo listarPaciente generador po:"+e.getMessage());
			}
		}
		return retSalida;
	}

	public BResult buscarPaciente(DynaBean dyna) throws BusinessException{
		BResult 				retSalida		= null;
		OperacionesComunesDAO	operacionesDAO	= null;
		StringBuffer 			query 			= new StringBuffer(); 
		try{
			query = estableceQuery(dyna);
			conectar();
			operacionesDAO	 	= new OperacionesComunesDAO(conn);
			retSalida 			= operacionesDAO.listado(query);
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(-1);
			retSalida.setMessage("[PacienteBO] error en metodo buscarPaciente generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(-1);
				retSalida.setMessage("[PacienteBO] error en metodo buscarPaciente generador po:"+e.getMessage());
			}
		}
		return retSalida;
	}
	
	public BResult buscarPacienteEspecifico(DynaBean dyna) throws BusinessException{
		BResult 				retSalida		= null;
		PacienteDAO				pacienteDAO		= null;
		try{
			conectar();
			pacienteDAO	 	= new PacienteDAO(conn);
			retSalida 		= pacienteDAO.buscarPacienteEspecifico(Utilitario.getPropertyDynaBean(dyna, "codigo"));
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(-1);
			retSalida.setMessage("[PacienteBO] error en metodo buscarPacienteEspecifico generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(-1);
				retSalida.setMessage("[PacienteBO] error en metodo buscarPacienteEspecifico generador po:"+e.getMessage());
			}
		}
		return retSalida;
	}
	
	public BResult buscarPaciente_for_HC(DynaBean dyna) throws BusinessException{
		BResult 				retSalida		= null;
		PacienteDAO				pacienteDAO		= null;
		try{
			conectar();
			pacienteDAO	 	= new PacienteDAO(conn);
			retSalida 		= pacienteDAO.buscarPacientexHC(Utilitario.getPropertyDynaBean(dyna, "dni"));
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(-1);
			retSalida.setMessage("[PacienteBO] error en metodo buscarPaciente_for_HC generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(-1);
				retSalida.setMessage("[PacienteBO] error en metodo buscarPaciente_for_HC generador po:"+e.getMessage());
			}
		}
		return retSalida;
	}
	
	public BResult buscarPaciente_for_OS(DynaBean dyna) throws BusinessException{
		BResult 				retSalida		= null;
		PacienteDAO				pacienteDAO		= null;
		try{
			conectar();
			pacienteDAO	 	= new PacienteDAO(conn);
			retSalida 		= pacienteDAO.buscarPacientexOS(Utilitario.getPropertyDynaBean(dyna,"dni"));
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(-1);
			retSalida.setMessage("[PacienteBO] error en metodo buscarPaciente_for_OS generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(-1);
				retSalida.setMessage("[PacienteBO] error en metodo buscarPaciente_for_OS generador po:"+e.getMessage());
			}
		}
		return retSalida;
	}
}
